package com.xuecheng.content.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xuecheng.content.mapper.CourseCategoryMapper;
import com.xuecheng.content.model.dto.CourseCategoryDto;
import com.xuecheng.content.model.po.CourseCategory;
import com.xuecheng.content.service.CourseCategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * <p>
 * 课程分类 服务实现类
 * </p>
 *
 * @author itcast
 */
@Slf4j
@Service
public class CourseCategoryServiceImpl extends ServiceImpl<CourseCategoryMapper, CourseCategory> implements CourseCategoryService {

    @Autowired
    CourseCategoryMapper courseCategoryMapper;
    @Override
    public List<CourseCategoryDto> queryNodeTree(String id) {
        List<CourseCategoryDto> courseCategoryTreeDtos = courseCategoryMapper.queryNodeTree(id);
        //将list转map,以备使用,排除根节点
        Map<String, CourseCategoryDto> mapTemp = courseCategoryTreeDtos.stream().filter(item->!id.equals(item.getId()))
                .collect(Collectors.toMap(key -> key.getId(), value -> value, (key1, key2) -> key2));
        // 将一级分类加入List<CourseCategoryDto>集合中
//        ArrayList<CourseCategoryDto> courseCategoryDtos = new ArrayList<>();
//        courseCategoryTreeDtos.stream().filter(item->!id.equals(item.getId())).forEach(item->{
//            if(id.equals(item.getParentid())){
//                courseCategoryDtos.add(item);
//            }
//            // 找到当前节点的父节点
//            CourseCategoryDto courseCategoryDto = mapTemp.get(item.getParentid());
//            if(courseCategoryDto != null){
//                if (courseCategoryDto.getChildrenTreeNodes() ==null){
//                    courseCategoryDto.setChildrenTreeNodes(new ArrayList<CourseCategoryDto>());
//                }
//                courseCategoryDto.getChildrenTreeNodes().add(item);
//            }
//        });


        //最终返回的list
        List<CourseCategoryDto> categoryTreeDtos = new ArrayList<>();
        //依次遍历每个元素,排除根节点
        courseCategoryTreeDtos.stream().filter(item->!id.equals(item.getId())).forEach(item->{
            if(item.getParentid().equals(id)){
                categoryTreeDtos.add(item);
            }
            //找到当前节点的父节点
            CourseCategoryDto courseCategoryTreeDto = mapTemp.get(item.getParentid());
            if(courseCategoryTreeDto!=null){
                if(courseCategoryTreeDto.getChildrenTreeNodes() ==null){
                    courseCategoryTreeDto.setChildrenTreeNodes(new ArrayList<CourseCategoryDto>());
                }
                //下边开始往ChildrenTreeNodes属性中放子节点
                courseCategoryTreeDto.getChildrenTreeNodes().add(item);
            }
        });
        return categoryTreeDtos;

//        List<CourseCategoryDto> courseCategoryDtoList = courseCategoryMapper.queryNodeTree(id);
//        System.out.println(courseCategoryDtoList);
//        return null;

//        LambdaQueryWrapper<CourseCategory> lambdaQueryWrapper = new LambdaQueryWrapper<CourseCategory>();
//        lambdaQueryWrapper.orderByAsc(CourseCategory::getId);
//        List<CourseCategory> courseCategories = this.list(lambdaQueryWrapper);
//        List<CourseCategoryDto> courseCategoryDtolist = new ArrayList<CourseCategoryDto>();

        //将list转map,以备使用,排除根节点
//        Map<String, CourseCategoryDto> mapTemp = courseCategoryDtolist.stream()
//                .filter(item->!id.equals(item.getId()))
//                .collect(Collectors.toMap(key -> key.getId(), value -> value, (key1, key2) -> key2));
//
//        courseCategories.stream().filter(item->!id.equals(item.getId()))
//                .forEach(item ->{
//                    if(item.getParentid().equals(id)){
//                        courseCategoryDtolist.add((CourseCategoryDto) item);
//                    }
//                    if(mapTemp.get(item.getParentid()) != null){
//                        for (CourseCategoryDto courseCategoryDto : courseCategoryDtolist) {
//                            if(Objects.equals(courseCategoryDto.getId(), item.getParentid())){
//                                courseCategoryDto.setChildrenTreeNodes(courseCategoryDto.getChildrenTreeNodes().add((CourseCategoryDto) item));
//                            }
//                        }
//                    }
//                });
//        for (CourseCategory courseCategory : courseCategories) {
//            CourseCategoryDto courseCategoryDto = new CourseCategoryDto();
//            BeanUtils.copyProperties(courseCategory,courseCategoryDto);
//            courseCategoryDtolist.add(courseCategoryDto);
//        }
//        for (CourseCategory courseCategory : courseCategories) {
//            if (!id.equals(courseCategory.getId())) {
//                if (id.equals(courseCategory.getParentid())) {
//                    CourseCategoryDto courseCategoryDto = new CourseCategoryDto();
//                    BeanUtils.copyProperties(courseCategory,courseCategoryDto);
//                    courseCategoryDtolist.add(courseCategoryDto);
//                }
//            }else{
//                for (CourseCategoryDto courseCategoryDto : courseCategoryDtolist) {
//
//                }
//            }
//
//        }

//        return null;
    }
}
